利用 Cli 和脚本实现自动化批量提取表格中网址的内容并保存到本地 需求

258 字

利用 CLI 和脚本实现自动化批量提取表格中网址的内容并保存到本地

这个方法需要在命令行中操作,是处理大批量链接最高效的方式。

了解 CLI 工具:Obsidian Web Clipper 提供了命令行工具 (CLI),能独立于浏览器直接根据 URL 抓取网页内容,生成结构化的 Markdown 文件。

准备工作:确认已安装 Node.js 环境。

安装 CLI 工具:在终端或命令提示符中运行以下命令:

bash
npm install -g obsidian-clipper
编写脚本并执行:以下是核心步骤,我会提供一个使用教程:

第一步:导出并整理链接:从 Excel 中将所有网址和文件名整理成一个 CSV 文件(推荐 links.csv),格式如下。

第二步:创建脚本文件:新建一个 batch_clipper.js 文件,将下面的代码复制进去。

第三步:修改脚本:根据注释,把 /path/to/your/vault/Clippings/、links.csv 文件路径等换成你自己的。

第四步:运行脚本:在终端里运行 node batch_clipper.js。

📝 点击查看具体的 `batch_clipper.js` 代码 javascript const { exec } = require('child_process'); const fs = require('fs'); const path = require('path'); // --- 请将路径替换为你自己的实际路径 --- const VAULT_PATH = '/path/to/your/vault/Clippings/'; const CSV_FILE_PATH = path.join(__dirname, 'links.csv'); // ---------------------------------------------- // 确保保存路径以斜杠结尾,便于拼接文件名 const normalizedVaultPath = VAULT_PATH.endsWith('/') ? VAULT_PATH : VAULT_PATH + '/'; // 1. 读取CSV文件 fs.readFile(CSV_FILE_PATH, 'utf8', (err, data) => { if (err) { console.error(`读取CSV文件失败: ${err}`); return; } // 2. 解析CSV (简单版本,如果内容包含逗号请使用更健壮的库如 'csv-parser') const lines = data.split('\n'); // 假设CSV没有表头,第一列是URL,第二列是文件名 for (const line of lines) { if (line.trim() === '') continue; const [url, fileName] = line.split(','); if (!url) { console.log('跳过无效行:', line); continue; } // 3. 构造命令 const finalFileName = fileName ? fileName.trim() : generateFileNameFromUrl(url); const fullPath = `${normalizedVaultPath}${finalFileName}.md`; // 使用 obsidian-clipper 命令进行抓取 const command = `obsidian-clipper clip "${url}" --output "${fullPath}"`; // 4. 执行抓取 console.log(`正在抓取: ${url} -> ${fullPath}`); exec(command, (error, stdout, stderr) => { if (error) { console.error(`抓取失败 ${url}: ${error}`); return; } console.log(`成功抓取: ${url}`); }); } }); function generateFileNameFromUrl(url) { // 生成一个安全的文件名 try { const urlObj = new URL(url); let fileName = urlObj.hostname + urlObj.pathname; fileName = fileName.replace(/[^a-z0-9]/gi, '_').toLowerCase(); return fileName.substring(0, 50); // 限制长度 } catch (e) { return 'unknown_' + Date.now(); } }